iT邦幫忙

2022 iThome 鐵人賽

DAY 12
0
Software Development

剛入職軟體工程師會需要知道的常見工具篇系列 第 12

[Day12] 簡單搞懂Nginx常見的Access-Control-Allow-Headers

  • 分享至 

  • xImage
  •  

前情提要一下,今天想來跟大家分享Nginx常會看到的設定資料,卻不知道詳細是什麼意思~

  • proxy_pass:反向代理到同一台主機的哪個Port

  • Access-Control-Allow-Headers:設定接受哪些請求的 Header

  • Access-Control-Allow-Origin: 設定從哪個源頭允許來獲取資料,例如*就是哪有都允許,www.test.com.tw 就是只允許從www.test.com.tw 來才能request資料

  • Access-Control-Allow-Methods: 設定哪些methods允許來獲取資料

  • 範例設定資料如下,

location /api {
        
        proxy_pass http://127.0.0.1:5000;

        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Methods 'GET,POST,OPTIONS';
        add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
        if ($request_method = 'OPTIONS') {
                return 204;
        }
}

是不是常常看見設定有這幾行,卻不曉得是幹嘛用的,這邊就先解釋一下~

if ($request_method = 'OPTIONS') {
        return 204;
}

簡單來說,就是瀏覽器必須首先使用OPTIONS 方法發起一個預檢請求(preflight request),從而獲知服務端是否允許該跨域請求(CORS),這是有會回傳是否需要帶身份憑證等資訊(Cookies, HTTP認證的相關資訊),服務端確認後才會實際發起HTTP請求~

  • Access-Control-Allow-Headers
    • User-Agent:特定的字串來標示自己的身份,以及相關的訊息,例如裝置、作業系統、應用程式,來表明使用的身份。
    • DNT: (Do Not Track,請勿追蹤)請求headers表明user針對追蹤程式的設定,允許用戶選擇是否可以通過他們通過 HTTP 與之通信的每個服務器和 Web 應用程序跟踪他們的活動
      • 0:用戶允許目標網站追蹤。
      • 1:用戶不允許目標網站追蹤。
    • If-Modified-Since
      • 指示瀏覽器首次從服務器下載資源的時間。這有助於確定自上次訪問後資源是否已更改。如果特定資源的 HTTP 狀態為304 Not Modified,則表示該文件未更改,無需再次下載。擁有此功能可以讓網站所有者和訪問者都節省資源,因為不必每次都檢索文件(對SEO有幫助)

        圖片來源
    • X-Requested-With
      • 區分普通請求還是ajax 請求
    • Authorization
      • 憑證 例如:Bearer Token
    • X-Mx-ReqToken
      • 用來支援profiler key (這邊資料有點少),直接參考連結
    • Keep-Alive
      • 使Client端到Server端的連接持續有效,避免了重複的重新建立連接

        參考圖片
    • Cache-Control
      • 用來控制HTTP請求、回應的快取行為
        • Cache-Control: max-age=<秒數>
          • 代表這個 Response 的過期時間是 <秒數> 秒,所以在秒數內網頁重新整理,都會被,都會被瀏覽器cache住喔
        • Cache-Control: no-store
          • 瀏覽器將不會快取任何內容(永遠不要快取)
        • Cache-Control: no-cache
          • 瀏覽器會快取所有內容,但每次都會發送請求向伺服器詢問是否有新內容要提供(永遠檢查快取)
    • Content-Type
      • Response回的內容類型
        • application/json => Json
        • multipart/form-data => 使用POST傳遞表格(Form)資料

參考資料:

  1. DNT
  2. User-Agent
  3. If-Modified-Since
  4. Keep-Alive
  5. Content-Type
  6. Cache-Control
    ps. 參考資料中的連結都有說得更詳細喔~

上一篇
[Day11] 簡單搞懂Rest & GraphQL 差異
下一篇
[Day13] 簡單搞懂Nginx Certbot 設定
系列文
剛入職軟體工程師會需要知道的常見工具篇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言